/* 
 * DepartamentoController.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.controller;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

import br.com.pma.chamatec.business.IDepartamentoBO;
import br.com.pma.chamatec.exception.ChamatecNegocioException;
import br.com.pma.chamatec.util.EnumResources;
import br.com.pma.entity.Departamento;

/**
 * Controlador que representa o Caso de Uso Manter Departamento.
 *
 * @author Ludemeula Fernandes de Sá
 */
@ManagedBean
@ViewScoped
public class DepartamentoController extends AbstractController {
	private static final long serialVersionUID = 7284608646094609114L;

	@Inject
	private IDepartamentoBO departamentoBO;

	@Inject
	private Departamento departamento;

	@Inject
	private Departamento departamentoSearch;

	private List<Departamento> departamentos;
	
	/**
	 * Envia para a página de cadastro de Departamento.
	 * 
	 */
	public void novo() {
		departamento = new Departamento();
		mostraCadastro();
		setIsCadastro(true);
	}

	/**
	 * Volta para a tela de cadastro.
	 * 
	 */
	public String cancelar() {
		limpar();
		return "index";
	}

	/**
	 * Limpa os campos de pesquisa e a datatable.
	 * 
	 */
	public void limpar() {
		departamentos = null;
		departamentoSearch = new Departamento();
	}

	/**
	 * Retorna os dados da entidade Departamento.
	 * 
	 */
	public void pesquisar() {
		try {
			departamentos = null;
			departamentos = departamentoBO.pesquisar(departamentoSearch);
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Salva os dados da entidade Departamento.
	 * 
	 */
	public void salvar() {
		try {
			EnumResources msg = EnumResources.MS_007;
			if (departamento.getId() != null && departamento.getId() != 0) {
				msg = EnumResources.MS_008;
			}
			departamento = departamentoBO.salvar(departamento);
			departamento = new Departamento();

			addFacesMessage(msg);
			escondeCadastro();
			pesquisar();
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Envia para a tela de cadastro de Departamento.
	 * 
	 * @param departamento
	 */
	public void alterar(Departamento departamento) {
		this.departamento = departamento;
		mostraCadastro();
	}

	/**
	 * Remove os dados da entidade Departamento.
	 * 
	 */
	public void remover() {
		try {
			departamentoBO.remover(departamento);
			pesquisar();
			addFacesMessage(EnumResources.MS_009);
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/********************************************* Getters e Setters *****************************************************/
	/**
	 * @return the departamento
	 */
	public Departamento getDepartamento() {
		return departamento;
	}

	/**
	 * @param departamento the departamento to set
	 */
	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	/**
	 * @return the departamentoSearch
	 */
	public Departamento getDepartamentoSearch() {
		return departamentoSearch;
	}

	/**
	 * @param departamentoSearch the departamentoSearch to set
	 */
	public void setDepartamentoSearch(Departamento departamentoSearch) {
		this.departamentoSearch = departamentoSearch;
	}

	/**
	 * @return the departamentos
	 */
	public List<Departamento> getDepartamentos() {
		return departamentos;
	}

	/**
	 * @param departamentos the departamentos to set
	 */
	public void setDepartamentos(List<Departamento> departamentos) {
		this.departamentos = departamentos;
	}
}